/*
    获取文件的时间属性，包括文件最后被访问的时间、文件内容最后被修改的时间以及文件状态最后被改变的时间，
    并使用字符串形式将其打印出来，包括时间和日期、表示形式自定。
*/

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    struct stat file_stat;
    struct tm file_tm;
    char time_str[100];
    int ret;

    /*  获取文件属性    */
    ret = stat("./test_file",&file_stat);
    if(-1 == ret)
    {
        perror("stat error");
        exit(-1);
    }

    /*  打印文件最后被访问时间  */
    localtime_r(&file_stat.st_atim.tv_sec,&file_tm);        //atim
    strftime(time_str,sizeof(time_str),
                        "%Y-%m-%d %H:%M:%S",&file_tm);
    printf("time of last access:%s\n",time_str);

    /*  打印文件内容最后被修改时间  */
    localtime_r(&file_stat.st_mtim.tv_sec,&file_tm);        //mtim
    strftime(time_str,sizeof(time_str),
                        "%Y-%m-%d %H:%M:%S",&file_tm);
    
    printf("time of last modification: %s\n", time_str);

    /* 打印文件状态最后改变的时间 */
    localtime_r(&file_stat.st_ctim.tv_sec, &file_tm);       //ctim
    strftime(time_str, sizeof(time_str),
                        "%Y-%m-%d %H:%M:%S", &file_tm);

    printf("time of last status change: %s\n", time_str);

    exit(0);


}